<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use GuzzleHttp\Client;
use function React\Promise\map;

class Fang extends Base
{
    // 访问器自定义的字段需appends 追加字段
    protected $appends = ['img', 'fang_img', 'fang_imgg', 'conf', 'fang_conf', 'fangxing', 'chaoxiang'];

    // 与房东表关联
    public function owner()
    {
        return $this->belongsTo(FangOwner::class, 'fang_owner', 'id');
    }

    // 修改器( 数据保存到数据库时,对相应字段进行修改 )   fang_config
    public function setFangConfigAttribute($value)
    {
        $this->attributes['fang_config'] = implode(',', $value);
    }

    // 访问器( 从数据库取出数据时,添加或修改某个数据 ) 获取 fang_conf
    public function getFangConfAttribute()
    {
        return explode(',', $this->attributes['fang_config']);
    }

    // 访问器( 从数据库取出数据时,添加或修改某个数据 ) 获取 fang_conf
    public function getConfAttribute()
    {
        $arr = explode(',', $this->attributes['fang_config']);
        $ret = Fangattr::whereIn('id', $arr)->select('name', 'icon')->get();
        return $ret;
    }

    // 访问器( 从数据库取出数据时,添加或修改某个数据 ) 获取 chaoxiang
    public function getChaoxiangAttribute()
    {
        $id  = $this->attributes['fang_direction'];
        $ret = Fangattr::select('name', 'icon')->find($id);
        return $ret;
    }

    // 访问器( 从数据库取出数据时,添加或修改某个数据 ) 获取 fangxing
    public function getFangxingAttribute()
    {
        return $this->attributes['fang_shi'] . '室' . $this->attributes['fang_ting'] . '厅' . $this->attributes['fang_wei'] . '卫';
    }

    // 访问器( 从数据库取出数据时,添加或修改某个数据 ) 获取 fang_conf
    public function getImgAttribute()
    {
        $data = explode('#', $this->attributes['fang_pic']);
        return config('url.domain') . $data[0];
    }

    // 访问器 读取 fang_pic  返回所有图片  数组
    public function getFangImggAttribute()
    {
        return explode('#', $this->attributes['fang_pic']);
    }

    // 访问器 读取 fang_pic  返回所有图片  数组
    public function getFangImgAttribute()
    {
        $data = explode('#', $this->attributes['fang_pic']);
        $arr  = array_map(function ($item) {
            return config('url.domain') . $item;
        }, $data);
        return $arr;
    }

    // 修改器  fang_pic
    public function setFangPicAttribute($value)
    {
        $this->attributes['fang_pic'] = trim($value, '#');
    }

    // 房源信息
    public function relationData()
    {
        // 区关联数据表数据
        // 业主
        $ownerData = FangOwner::get();
        // 省份数据
        $cityData = City::where('pid', 0)->get();
        // 租期方式
        $fang_rent_type_id = Fangattr::where('field_name', 'fang_rent_type')->value('id');
        $fang_rent_type    = Fangattr::where('pid', $fang_rent_type_id)->get();
        // 租赁方式
        $fang_rent_class_id = Fangattr::where('field_name', 'fang_rent_class')->value('id');
        $fang_rent_class    = Fangattr::where('pid', $fang_rent_class_id)->get();
        // 租金范围
        $fang_rent_range_id = Fangattr::where('field_name', 'fang_rent_range')->value('id');
        $fang_rent_range    = Fangattr::where('pid', $fang_rent_range_id)->get();
        // 朝向
        $fang_direction_id = Fangattr::where('field_name', 'fang_direction')->value('id');
        $fang_direction    = Fangattr::where('pid', $fang_direction_id)->get();
        // 配套设施
        $fang_config_id = Fangattr::where('field_name', 'fang_config')->value('id');
        $fang_config    = Fangattr::where('pid', $fang_config_id)->get();
        // 返回数据
        return compact('ownerData', 'cityData', 'fang_rent_type', 'fang_rent_class', 'fang_rent_range', 'fang_direction', 'fang_config');
    }

    // 高德地址转换  经纬度转换
    public function location($addr, $province)
    {
        $client   = new Client(['timeout' => 10]);
        $url      = config('gaode.geocode');
        $url      = sprintf($url, $addr, $province);
        $response = $client->get($url);
        $body     = (string)$response->getBody();
        $arr      = json_decode($body, true);
        if (count($arr['geocodes']) > 0) {
            $locationArr = explode(',', $arr['geocodes'][0]['location']);
            return $locationArr;
        }
        return [];
    }

    // 获取已出租未出租房源数量
    public function fangcount()
    {
        // 未出租
        $wei = self::where('fang_status', 0)->count();
        // 所有房源
        $count = self::count();
        // 已出租
        $cuzu = $count - $wei;
        return [
            'count' => $count,
            'cuzu'  => $cuzu,
            'wei'   => $wei
        ];
    }
}
